// 给你一个整数数组 nums ，
// 请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。

// 子数组 是数组中的一个连续部分。


// 把数组每一项，作为数组子序列的最后一个，计算其和
// 如果dp[i-1]>0 则dp[i] = dp[i-1] + nums[i]
// 如果dp[i-1]<=0 则说明加上它会更小或者不变，则从nums[i]起
function maxSubArray(nums: number[]): number {
    let dp: any = [];
    for(let i=0;i<nums.length;i++){
        dp[i] = 0;
    }
    dp[0] = nums[0]
    for(let i=1; i < nums.length;i++){
        if(dp[i-1]>0){
            dp[i] = dp[i-1]+nums[i];//计算每个dp
        }else{
            dp[i] = nums[i];
        }
    }
    return Math.max(...dp);
};

let nums = [-2,1,-3,4,-1,2,1,-5,4];
console.log(maxSubArray(nums));
;